From 306db7d03dec2b0e41fd3dc832343c1c9c1cc814 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Wed, 15 Nov 2000 21:22:52 +0000 Subject: [PATCH] Invalidate the side windows when we invalidate the main window. 2000-11-15 Havoc Pennington * gtk/gtktextview.c (changed_handler): Invalidate the side windows when we invalidate the main window. * gtk/testtext.c (create_view): Get rid of text_changed_callback, GtkTextView will now invalidate the side windows for us when text changes. --- ChangeLog | 9 ++++++++ ChangeLog.pre-2-0 | 9 ++++++++ ChangeLog.pre-2-10 | 9 ++++++++ ChangeLog.pre-2-2 | 9 ++++++++ ChangeLog.pre-2-4 | 9 ++++++++ ChangeLog.pre-2-6 | 9 ++++++++ ChangeLog.pre-2-8 | 9 ++++++++ gtk/gtktextview.c | 57 ++++++++++++++++++++++++++++++++++++++++++---- gtk/testtext.c | 34 --------------------------- tests/testtext.c | 34 --------------------------- 10 files changed, 116 insertions(+), 72 deletions(-) diff --git a/ChangeLog b/ChangeLog index f90476222a..fe681ed215 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2000-11-15 Havoc Pennington + + * gtk/gtktextview.c (changed_handler): Invalidate the side windows + when we invalidate the main window. + + * gtk/testtext.c (create_view): Get rid of text_changed_callback, + GtkTextView will now invalidate the side windows for us when text + changes. + Wed Nov 15 16:02:20 2000 Owen Taylor * gtk/gtktextview.c (changed_handler): Call scroll_calc_now() diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index f90476222a..fe681ed215 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,12 @@ +2000-11-15 Havoc Pennington + + * gtk/gtktextview.c (changed_handler): Invalidate the side windows + when we invalidate the main window. + + * gtk/testtext.c (create_view): Get rid of text_changed_callback, + GtkTextView will now invalidate the side windows for us when text + changes. + Wed Nov 15 16:02:20 2000 Owen Taylor * gtk/gtktextview.c (changed_handler): Call scroll_calc_now() diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index f90476222a..fe681ed215 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +2000-11-15 Havoc Pennington + + * gtk/gtktextview.c (changed_handler): Invalidate the side windows + when we invalidate the main window. + + * gtk/testtext.c (create_view): Get rid of text_changed_callback, + GtkTextView will now invalidate the side windows for us when text + changes. + Wed Nov 15 16:02:20 2000 Owen Taylor * gtk/gtktextview.c (changed_handler): Call scroll_calc_now() diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index f90476222a..fe681ed215 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,12 @@ +2000-11-15 Havoc Pennington + + * gtk/gtktextview.c (changed_handler): Invalidate the side windows + when we invalidate the main window. + + * gtk/testtext.c (create_view): Get rid of text_changed_callback, + GtkTextView will now invalidate the side windows for us when text + changes. + Wed Nov 15 16:02:20 2000 Owen Taylor * gtk/gtktextview.c (changed_handler): Call scroll_calc_now() diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index f90476222a..fe681ed215 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,12 @@ +2000-11-15 Havoc Pennington + + * gtk/gtktextview.c (changed_handler): Invalidate the side windows + when we invalidate the main window. + + * gtk/testtext.c (create_view): Get rid of text_changed_callback, + GtkTextView will now invalidate the side windows for us when text + changes. + Wed Nov 15 16:02:20 2000 Owen Taylor * gtk/gtktextview.c (changed_handler): Call scroll_calc_now() diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index f90476222a..fe681ed215 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +2000-11-15 Havoc Pennington + + * gtk/gtktextview.c (changed_handler): Invalidate the side windows + when we invalidate the main window. + + * gtk/testtext.c (create_view): Get rid of text_changed_callback, + GtkTextView will now invalidate the side windows for us when text + changes. + Wed Nov 15 16:02:20 2000 Owen Taylor * gtk/gtktextview.c (changed_handler): Call scroll_calc_now() diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index f90476222a..fe681ed215 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +2000-11-15 Havoc Pennington + + * gtk/gtktextview.c (changed_handler): Invalidate the side windows + when we invalidate the main window. + + * gtk/testtext.c (create_view): Get rid of text_changed_callback, + GtkTextView will now invalidate the side windows for us when text + changes. + Wed Nov 15 16:02:20 2000 Owen Taylor * gtk/gtktextview.c (changed_handler): Call scroll_calc_now() diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 72ca677464..28a3b5831a 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -2109,7 +2109,7 @@ changed_handler (GtkTextLayout *layout, widget = GTK_WIDGET (data); if (GTK_WIDGET_REALIZED (text_view)) - { + { gtk_text_view_get_visible_rect (text_view, &visible_rect); redraw_rect.x = visible_rect.x; @@ -2123,10 +2123,22 @@ changed_handler (GtkTextLayout *layout, if (gdk_rectangle_intersect (&redraw_rect, &visible_rect, &redraw_rect)) { - redraw_rect.x -= text_view->xoffset; - redraw_rect.y -= text_view->yoffset; + /* text_window_invalidate_rect() takes buffer coordinates */ text_window_invalidate_rect (text_view->text_window, &redraw_rect); + + if (text_view->left_window) + text_window_invalidate_rect (text_view->left_window, + &redraw_rect); + if (text_view->right_window) + text_window_invalidate_rect (text_view->right_window, + &redraw_rect); + if (text_view->top_window) + text_window_invalidate_rect (text_view->top_window, + &redraw_rect); + if (text_view->bottom_window) + text_window_invalidate_rect (text_view->bottom_window, + &redraw_rect); } } @@ -4480,7 +4492,44 @@ static void text_window_invalidate_rect (GtkTextWindow *win, GdkRectangle *rect) { - gdk_window_invalidate_rect (win->bin_window, rect, FALSE); + GdkRectangle window_rect; + + gtk_text_view_buffer_to_window_coords (GTK_TEXT_VIEW (win->widget), + win->type, + rect->x, + rect->y, + &window_rect.x, + &window_rect.y); + + window_rect.width = rect->width; + window_rect.height = rect->height; + + /* Adjust the rect as appropriate */ + + switch (win->type) + { + case GTK_TEXT_WINDOW_TEXT: + break; + + case GTK_TEXT_WINDOW_LEFT: + case GTK_TEXT_WINDOW_RIGHT: + window_rect.x = 0; + window_rect.width = win->allocation.width; + break; + + case GTK_TEXT_WINDOW_TOP: + case GTK_TEXT_WINDOW_BOTTOM: + window_rect.y = 0; + window_rect.height = win->allocation.height; + break; + + default: + g_warning ("%s: bug!", G_STRLOC); + return; + break; + } + + gdk_window_invalidate_rect (win->bin_window, &window_rect, FALSE); } static gint diff --git a/gtk/testtext.c b/gtk/testtext.c index 1ea511bdd7..ec2c5a1a5f 100644 --- a/gtk/testtext.c +++ b/gtk/testtext.c @@ -1552,35 +1552,6 @@ cursor_set_callback (GtkTextBuffer *buffer, } } - -static void -text_changed_callback (GtkTextBuffer *buffer, - gpointer user_data) -{ - GtkTextView *text_view; - - /* Redraw line number windows if the buffer changes - * and the widget is mapped (windows may not exist otherwise) - */ - - text_view = GTK_TEXT_VIEW (user_data); - - if (GTK_WIDGET_MAPPED (text_view)) - { - GdkWindow *line_window; - - line_window = gtk_text_view_get_window (text_view, - GTK_TEXT_WINDOW_LEFT); - - gdk_window_invalidate_rect (line_window, NULL, FALSE); - - line_window = gtk_text_view_get_window (text_view, - GTK_TEXT_WINDOW_RIGHT); - - gdk_window_invalidate_rect (line_window, NULL, FALSE); - } -} - static gint tab_stops_expose (GtkWidget *widget, GdkEventExpose *event, @@ -1930,11 +1901,6 @@ create_view (Buffer *buffer) "expose_event", GTK_SIGNAL_FUNC (line_numbers_expose), NULL); - - gtk_signal_connect (GTK_OBJECT (view->buffer->buffer), - "changed", - GTK_SIGNAL_FUNC (text_changed_callback), - view->text_view); gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0); gtk_container_add (GTK_CONTAINER (sw), view->text_view); diff --git a/tests/testtext.c b/tests/testtext.c index 1ea511bdd7..ec2c5a1a5f 100644 --- a/tests/testtext.c +++ b/tests/testtext.c @@ -1552,35 +1552,6 @@ cursor_set_callback (GtkTextBuffer *buffer, } } - -static void -text_changed_callback (GtkTextBuffer *buffer, - gpointer user_data) -{ - GtkTextView *text_view; - - /* Redraw line number windows if the buffer changes - * and the widget is mapped (windows may not exist otherwise) - */ - - text_view = GTK_TEXT_VIEW (user_data); - - if (GTK_WIDGET_MAPPED (text_view)) - { - GdkWindow *line_window; - - line_window = gtk_text_view_get_window (text_view, - GTK_TEXT_WINDOW_LEFT); - - gdk_window_invalidate_rect (line_window, NULL, FALSE); - - line_window = gtk_text_view_get_window (text_view, - GTK_TEXT_WINDOW_RIGHT); - - gdk_window_invalidate_rect (line_window, NULL, FALSE); - } -} - static gint tab_stops_expose (GtkWidget *widget, GdkEventExpose *event, @@ -1930,11 +1901,6 @@ create_view (Buffer *buffer) "expose_event", GTK_SIGNAL_FUNC (line_numbers_expose), NULL); - - gtk_signal_connect (GTK_OBJECT (view->buffer->buffer), - "changed", - GTK_SIGNAL_FUNC (text_changed_callback), - view->text_view); gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0); gtk_container_add (GTK_CONTAINER (sw), view->text_view); -- 2.30.2